package service

import (
	"context"
	"errors"
	"gorm.io/gorm"
	"insighttracking/query/dao"
	"insighttracking/query/model"
)

type _enterprisePersonService struct{}

func (s _enterprisePersonService) CreateApi(ctx context.Context, tx *dao.QueryTx, data *model.EnterprisePersonEntity) error {
	return tx.EnterprisePersonEntity.WithContext(ctx).Create(data)
}

func (s _enterprisePersonService) GetByMobileApi(ctx context.Context, mobile string) error {
	_, err := dao.EnterprisePersonEntity.WithContext(ctx).Where(dao.EnterprisePersonEntity.Mobile.Eq(mobile)).First()
	if !errors.Is(err, gorm.ErrRecordNotFound) {
		return errors.New("手机号码已经存在,不能重复")
	}
	return nil
}

func (s _enterprisePersonService) GetByRoleIdApi(ctx context.Context, enterpriseId, roleId int64) (*model.EnterprisePersonEntity, error) {
	return dao.EnterprisePersonEntity.WithContext(ctx).Where(
		dao.EnterprisePersonEntity.RoleID.Eq(roleId),
		dao.EnterprisePersonEntity.EnterpriseID.Eq(enterpriseId),
	).First()
}

func (s _enterprisePersonService) GetRoleIdApi(ctx context.Context, enterpriseId int64, roleIdList []int64) ([]*model.EnterprisePersonEntity, error) {
	tx := dao.EnterprisePersonEntity.WithContext(ctx).Where(
		dao.EnterprisePersonEntity.EnterpriseID.Eq(enterpriseId),
	)
	if len(roleIdList) > 0 {
		tx = tx.Where(dao.EnterprisePersonEntity.RoleID.In(roleIdList...))
	}
	return tx.Order(dao.EnterprisePersonEntity.ID.Desc()).Find()
}
func (s _enterprisePersonService) GetByIdListApi(ctx context.Context, enterpriseId int64, idList []int64) ([]*model.EnterprisePersonEntity, error) {
	return dao.EnterprisePersonEntity.WithContext(ctx).Where(
		dao.EnterprisePersonEntity.ID.In(idList...),
		dao.EnterprisePersonEntity.EnterpriseID.Eq(enterpriseId),
	).Find()
}

func (s _enterprisePersonService) GetByIdApi(ctx context.Context, id int64) (*model.EnterprisePersonEntity, error) {
	return dao.EnterprisePersonEntity.WithContext(ctx).Where(
		dao.EnterprisePersonEntity.ID.Eq(id),
	).First()
}

func (s _enterprisePersonService) DeleteByIdApi(ctx context.Context, tx *dao.QueryTx, id int64) error {
	if _, err := tx.EnterprisePersonEntity.WithContext(ctx).Where(dao.EnterprisePersonEntity.ID.Eq(id)).Delete(); err != nil {
		return err
	}
	return nil
}

func (s _enterprisePersonService) DeleteByEnterpriseIdApi(ctx context.Context, tx *dao.QueryTx, id int64) error {
	if _, err := tx.EnterprisePersonEntity.WithContext(ctx).Where(dao.EnterprisePersonEntity.EnterpriseID.Eq(id)).Delete(); err != nil {
		return err
	}
	return nil
}

func (s _enterprisePersonService) ModifyByEnterpriseIdApi(ctx context.Context, tx *dao.QueryTx, enterpriseId int64, status int64) error {
	if _, err := tx.EnterprisePersonEntity.WithContext(ctx).Where(dao.EnterprisePersonEntity.EnterpriseID.Eq(enterpriseId)).UpdateSimple(
		dao.EnterprisePersonEntity.Status.Value(status),
	); err != nil {
		return err
	}
	return nil
}

var EnterprisePersonService = new(_enterprisePersonService)
